/********************************/
/* LeerUsuarioXmlScreen.java    */
/********************************/
/*
  Autor  : Edgar Gonzalez
  email  : egonzale@ucla.edu.ve
  Version: 1.0 en J2ME
  Fecha  : 04 de enero del 2010
*/
package ucla.dcyt.fomento.xml;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;

import java.io.*;

import javax.microedition.io.file.*;
import javax.microedition.io.Connector;

import org.kxml2.io.*;
import org.kxml2.kdom.*;

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import org.xmlpull.v1.*;
import java.util.Random;

public class ActualizarUsuarioXmlScreen extends MainScreen implements FieldChangeListener  {
	FileConnection fc =  null;
	FileConnection fc1 =  null;
    DataInputStream is = null;
	private Document document;
	private Element root, fila, campo, valor;
    private LabelField mensaje;
    private ButtonField Salir;
    private ButtonField Regresar;
    private HorizontalFieldManager buttonManagerHorizontal;
	private VerticalFieldManager buttonManagerVertical;
	private String fileName = "file:///SDCard/usuarios.xml";
	private String usuarioBuscar = "camila";
	private String claveBuscar = "456";
	private String nivel;
	private String usuario;
	private String clave;
	int m;
	
	public ActualizarUsuarioXmlScreen() {
		buttonManagerHorizontal = new HorizontalFieldManager(Field.FIELD_LEFT);
        buttonManagerVertical = new VerticalFieldManager(VerticalFieldManager.VERTICAL_SCROLL | Field.FIELD_LEFT);
		//InputStreamReader reader = new InputStreamReader(getClass().getResourceAsStream("file:///SDCard/BlackBerry/documents/usuarios.xml"));
		document = new Document();
        
        try {
             fc = (FileConnection) Connector.open(fileName, Connector.READ_WRITE);
             is = fc.openDataInputStream();
             KXmlParser parser = new KXmlParser();
             parser.setInput(is, "ISO-8859-1");
             document.parse(parser);
             mensaje = new LabelField("Archivo leido exitosamente");
             buttonManagerVertical.add(mensaje);
             root = document.getRootElement();
             int root_child_count = root.getChildCount();
             
             for (int i = 0; i < root_child_count ; i++ ) {
               if (root.getType(i) != Node.ELEMENT) {
                 continue;
               }

               fila = root.getElement(i);
               if (!fila.getName().equals("fila")) {
                 continue;
               }

               int fila_item_count = fila.getChildCount();
               m=0;
               
               for (int j = 0; j < fila_item_count ; j++) {
                 if (fila.getType(j) != Node.ELEMENT) {
                   continue;
                 }
                 
                 campo = fila.getElement(j);
                 int campo_item_count = campo.getChildCount();
                 
                 for (int k = 0; k < campo_item_count ; k++) {
                   if (campo.getType(k) != Node.ELEMENT) {
                     continue;
                   }
                   valor = campo.getElement(k);
                   if (m==0)
                   {
                	usuario = valor.getText(0); 
                   }
                   if (m==1)
                   {
                	clave = valor.getText(0);
                   }
                   if (m==2)
                   {
                    if (usuario.compareTo(usuarioBuscar)==0 && clave.compareTo(claveBuscar)==0)
                    {
                     valor.removeChild(0);
                     Random azar = new Random();
                     nivel = new Integer(azar.nextInt(4)+1).toString();
                     valor.addChild(0, Node.TEXT, nivel);
                     buttonManagerVertical.add(new LabelField("------[ Detalles del Usuario Modificado ]-----"));
                     buttonManagerVertical.add(new LabelField("Usuario: " + usuario));
                     buttonManagerVertical.add(new LabelField("Clave: " + clave));
                     buttonManagerVertical.add(new LabelField("Nivel: " + nivel));
                     buttonManagerVertical.add(new LabelField("-----------------------------------------------------\n"));
                    }
                   }
                   m++;
                   valor = null;
                 }
                campo = null;
               }
               fila = null;
             }
             //eliminamos el archivo
             is.close();
             fc.delete();
             //Lo creamos de nuevo
             fc1 = (FileConnection) Connector.open(fileName, Connector.READ_WRITE);
             fc1.create();
             DataOutputStream os = null;
             os = fc1.openDataOutputStream();
             KXmlSerializer serializer = new KXmlSerializer();
             //Para identar el documento usuarios.xml, equivale a pretty en JDOM y PHP
             serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
             //serializer.setOutput(os, null);
             serializer.setOutput(os);
             /* Las siguientes 2 instrucciones en conjunto, son opcionales, para indicar 
                la version de xml y la codificaciom. La segunda linea para indicar el
                dtd o schema para la validacion cuando se desea hacer un parser
                significa que antes debes grabar el dtd o schema */
             
             serializer.processingInstruction("xml version='1.0' encoding='ISO-8859-1'", false);
             //Esta ya no es necesaria para la actualizacion
             //serializer.docdecl(" usuarios SYSTEM 'usuarios.dtd'");
             serializer.flush();
             //Modificado la clase  KXmlSerializer por la basura que quedaba encoding='ISO-8859-1' sin etiquetas
             document.setEncoding("");
             document.write(serializer);
             os.close();
             fc1.close();     
             
        } catch (IOException e) {
        	mensaje = new LabelField(e.getMessage());
        	buttonManagerVertical.add(mensaje);
        } catch (XmlPullParserException e) {
        	mensaje = new LabelField(e.getMessage());
        	buttonManagerVertical.add(mensaje);
        }
        
        Regresar = new ButtonField("Regresar", ButtonField.CONSUME_CLICK);
        Regresar.setChangeListener(this);
        Salir = new ButtonField("Salir", ButtonField.CONSUME_CLICK);
        Salir.setChangeListener(this);
        buttonManagerHorizontal.add(Regresar);
        buttonManagerHorizontal.add(Salir);
        add(buttonManagerVertical);
        add(buttonManagerHorizontal);
		
	}
	
	public void fieldChanged(Field field, int context) {
		if (field == Salir) {
			System.exit(0);
	    }
		if (field == Regresar) {
			 UiApplication.getUiApplication().pushScreen(new CrearUsuarioXmlOpcionScreen());
	    }
    }

}

